home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
011-020
/
amok13
/
flipmouse
/
flipmouse.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
5KB
|
167 lines
(*---------------------------------------------------------------------------
:Program. FlipMouse.mod
:Author. Fridtjof Björn Siebert
:Address. Nobileweg 67, D-7-Stgt-40
:Phone. (0)711/822509
:Shortcut. [fbs]
:Version. 1.0
:Date. 29-Dec-88 04:38:09
:Copyright. PD
:Language. MODULA-II
:Translator. M2Amiga v3.1d
:Contents. Programm invert all mouse movements.
:Remark. This is senseless!
---------------------------------------------------------------------------*)
MODULE FlipMouse;
FROM SYSTEM IMPORT ADR, SETREG, REG, LONGSET, BITSET, ADDRESS, CAST;
FROM Arts IMPORT Assert,TermProcedure;
FROM Exec IMPORT OpenDevice, CloseDevice, DoIO, IOFlagSet,
MsgPortPtr, IOStdReqPtr, Interrupt, Signal,
FindTask, TaskPtr, Wait, AllocSignal, FreeSignal;
FROM ExecSupport IMPORT CreatePort, DeletePort, CreateStdIO, DeleteStdIO;
FROM Input IMPORT inputName, addHandler, remHandler, writeEvent;
FROM InputEvent IMPORT InputEvent, InputEventPtr, Class;
FROM Intuition IMPORT Preferences, PreferencesPtr, GetPrefs, SetPrefs;
FROM Heap IMPORT Allocate;
(*------ VARs: ------*)
VAR
InputDevPort, TimerPort: MsgPortPtr; (* My MessagePorts *)
InputRequestBlock: IOStdReqPtr;
HandlerStuff: Interrupt;
Ev, TraceEv: InputEventPtr;
InputOpen, HandlerActive: BOOLEAN;
OldPrefs, NewPrefs: PreferencesPtr;
MyTask: TaskPtr;
PrefsSet: BOOLEAN;
x,y: CARDINAL;
MySignal: INTEGER;
(*------ Input Handler: ------*)
PROCEDURE FlipHandler(); (* $S- *)
BEGIN
Ev := ADDRESS(REG(8)); (* this gets InputEventList from A0 *)
(* A1 is ignored here 'cause there no memory needed *)
TraceEv := Ev;
WHILE TraceEv#NIL DO
WITH TraceEv^ DO
IF (class=rawmouse) THEN
x:=-x; y:=-y;
ELSIF (class=rawkey) AND (code=45H) THEN
Signal(MyTask,LONGSET{MySignal}); (* break myself. Isn't that nice? *)
END;
END;
TraceEv := TraceEv^.nextEvent;
END;
SETREG(0,Ev); (* Return eventlists address *)
END FlipHandler; (* $S+ *)
(*------ CleanUp: ------*)
PROCEDURE CleanUp();
BEGIN
(*------ Old Preferences: ------*)
IF PrefsSet THEN
SetPrefs(OldPrefs,SIZE(Preferences),TRUE);
END;
(*------ Remove Inputhandler: ------*)
IF HandlerActive THEN
WITH InputRequestBlock^ DO
command := remHandler;
data := ADR(HandlerStuff);
END;
DoIO(InputRequestBlock);
END;
(*------ Close Input-Device: ------*)
IF InputOpen THEN
CloseDevice(InputRequestBlock);
DeleteStdIO(InputRequestBlock);
DeletePort(InputDevPort);
END;
(*------ Free Signal: ------*)
IF MySignal>=0 THEN FreeSignal(MySignal) END;
END CleanUp;
(*------ MAIN: ------*)
BEGIN
(*------ Init: ------*)
InputOpen := FALSE; HandlerActive := FALSE; PrefsSet := FALSE;
MySignal := -1; MyTask := FindTask(NIL);
TermProcedure(CleanUp);
MySignal := AllocSignal(-1);
Assert(MySignal>=0,ADR("No more signals!!"));
(*------ Open Input Device: ------*)
InputDevPort := CreatePort(ADR("InputPort.FlipMouse"),0);
Assert(InputDevPort#NIL,ADR("CreatePort failed"));
InputRequestBlock := CreateStdIO(InputDevPort);
Assert(InputRequestBlock#NIL,ADR("CreateStdIO failed"));
OpenDevice(ADR(inputName),0,InputRequestBlock,LONGSET{});
InputOpen := TRUE;
(*------ Add Input-Handler: ------*)
WITH HandlerStuff DO
data := NIL;
node.pri := 51;
code := ADR(FlipHandler);
END;
WITH InputRequestBlock^ DO
command := addHandler;
data := ADR(HandlerStuff);
END;
DoIO(InputRequestBlock);
HandlerActive := TRUE;
(*------ Modify Preferences: ------*)
Allocate(OldPrefs,SIZE(Preferences));
Allocate(NewPrefs,SIZE(Preferences));
Assert((OldPrefs#NIL) AND (NewPrefs#NIL),ADR("Out of Memory!!!"));
GetPrefs(OldPrefs,SIZE(Preferences));
NewPrefs^ := OldPrefs^;
WITH NewPrefs^ DO
FOR y:=0 TO 15 DO
pointerMatrix[y+y+2] := 0;
pointerMatrix[y+y+3] := 0;
FOR x:=0 TO 15 DO
IF x IN CAST(BITSET,OldPrefs^.pointerMatrix[32-y-y]) THEN
INCL(CAST(BITSET,pointerMatrix[y+y+2]),15-x);
END;
IF x IN CAST(BITSET,OldPrefs^.pointerMatrix[33-y-y]) THEN
INCL(CAST(BITSET,pointerMatrix[y+y+3]),15-x);
END;
END;
END;
xOffset := -15-xOffset;
yOffset := -15-yOffset;
PrefsSet := TRUE;
SetPrefs(NewPrefs,SIZE(Preferences),TRUE);
END;
(*------ Wait a while: ------*)
IF Wait(LONGSET{MySignal})=LONGSET{} THEN END;
END FlipMouse.